'''
Author: wangyingjie 2778809626@qq.com
Date: 2025-07-03 15:35:52
LastEditors: wangyingjie 2778809626@qq.com
LastEditTime: 2025-07-06 12:53:32
FilePath: /two_wheeled_car/src/bot_nav/launch/localization.launch.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    """
    生成用于启动机器人导航系统的Launch描述。

    本函数配置并返回一个LaunchDescription对象，该对象包含启动导航2（Nav2）系统所需的所有节点。
    这包括地图服务器、自适应蒙特卡洛定位（AMCL）和生命周期管理器节点的配置。
    """

    # 获取导航配置文件的路径，这里以'bot_nav'包中的'amcl.yaml'文件为例。
    nav2_yaml = os.path.join(get_package_share_directory('bot_nav'), 'config','amcl.yaml')
    # 获取地图文件的路径，同样在'bot_nav'包中寻找'mymap.yaml'文件。
    map_file = os.path.join(get_package_share_directory('bot_nav'), 'maps', 'mymap.yaml')
    
    # 返回一个包含以下节点配置的LaunchDescription对象：
    return LaunchDescription([
        # 地图服务器节点配置
        Node(
            package='nav2_map_server',
            executable='map_server',
            name='map_server',
            output='screen',
            parameters=[{'use_sim_time': True},
                        {'yaml_filename':map_file}]
        ),
        # 自适应蒙特卡洛定位（AMCL）节点配置
        Node(
            package='nav2_amcl',
            executable='amcl',
            name='amcl',
            output='screen',
            parameters=[nav2_yaml]
        ),
        # 生命周期管理器节点配置，用于管理地图服务器和AMCL节点的生命周期
        Node(
            package='nav2_lifecycle_manager',
            executable='lifecycle_manager',
            name='lifecycle_manager_localization',
            output='screen',
            parameters=[{'use_sim_time': True},
                        {'autostart': True},
                        {'node_names': ['map_server', 'amcl']}]
        )
    ])
